namespace Digitalmes.Domain.Entities.Mes.Processes;

/// <summary>
/// 工步。
/// </summary>
[SugarTable("proc_step_task")]
public sealed class ProcStepTask : AuditedEntity
{
    /// <summary>
    /// 所属的工艺步骤 ID（工序级别）。
    /// </summary>
    public long StepId { get; set; }

    /// <summary>
    /// 工步代码
    /// </summary>
    [NotNull]
    public string? TaskCode { get; set; }

    /// <summary>
    /// 工步名称
    /// </summary>
    [NotNull]
    public string? TaskName { get; set; }

    /// <summary>
    /// 唯一工步顺序号（从 1 开始递增）。
    /// 顺序号可以分组，分组区间基数为 1000，设为 0 或是 1000 的倍数时会在区间内进行自增。
    /// 分组区间可以满足同一工序中存在多种工艺的情况，不同的工艺可以设定不同的顺序号区间。
    /// </summary>
    /// <remarks>
    /// <para>
    /// 下位系统给定序号与此设定的序号要匹配，若下位系统给定的序号没有在该系统中设置，会返回错误代码，同一个序号可以重复作业。
    /// </para>
    /// <para>
    /// 场景：例如拧紧，不同螺丝按拧紧顺序设定序号。
    /// </para>
    /// </remarks>
    public int Seq { get; set; }

    /// <summary>
    /// 工步操作说明
    /// </summary>
    public string? WorkInstruction { get; set; }

    /// <summary>
    /// 工步标准作业时间（单位：秒）
    /// </summary>
    public int StandardTime { get; set; }

    /// <summary>
    /// 是否检查工艺标准。
    /// </summary>
    /// <remarks>不受工艺步骤设置值影响</remarks>
    public bool IsCheckStandard { get; set; }

    /// <summary>
    /// 包含的工艺标准集合。
    /// </summary>
    [NotNull]
    [Navigate(NavigateType.OneToMany, nameof(ProcStepStandard.StepTaskId))]
    public List<ProcStepStandard>? Standards { get; set; }
}
